package com.itheima.health.service;

import com.alibaba.dubbo.config.annotation.Service;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.itheima.health.dao.CheckGroupDao;
import com.itheima.health.entity.PageResult;
import com.itheima.health.entity.QueryPageBean;
import com.itheima.health.pojo.CheckGroup;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * @program: itcast_health
 * @create: 2019-10-20 15:46
 * @author: li he
 * @description:
 */
@Service
public class CheckGroupServiceImpl implements CheckGroupService {

    @Autowired
    private CheckGroupDao checkGroupDao;

    @Override
    @Transactional
    public void add(Integer[] checkItemIds, CheckGroup checkGroup) {
        checkGroupDao.add(checkGroup);
        if (checkItemIds != null && checkItemIds.length > 0) {

            for (int checkItemId : checkItemIds) {
                checkGroupDao.addAssociation(checkGroup.getId(), checkItemId);
            }
        }
    }

    @Override
    public PageResult findPage(QueryPageBean queryPageBean) {
        //开始使用分页助手
        PageHelper.startPage(queryPageBean.getCurrentPage(), queryPageBean.getPageSize());
        Page<CheckGroup> page = checkGroupDao.findByCondition(queryPageBean.getQueryString());
        return new PageResult(page.getTotal(), page);
    }

    @Override
    public CheckGroup findById(Integer id) {
        return checkGroupDao.findById(id);
    }

    @Override
    public List<Integer> findCheckItemIdsById(Integer id) {
        return checkGroupDao.findCheckItemIdsById(id);
    }

    @Override
    @Transactional
    public void edit(Integer[] checkItemIds, CheckGroup checkGroup) {
        checkGroupDao.edit(checkGroup);

            checkGroupDao.delAssociationById(checkGroup.getId());
        if (checkItemIds != null && checkItemIds.length >0){
            for (Integer checkItemId : checkItemIds) {
                checkGroupDao.addAssociation(checkGroup.getId(),checkItemId);
            }
        }
    }

    @Override
    public void delById(Integer id) {
        /*
        * 1.查询检查套餐使用有没有关联该检查组
        *   1)如果关联则抛异常 :该检查组被检查套餐关联, 不能被删除 ! ! !
        *   2)如果没有关联则可以删除
        * 2.先根据检查组id 删除检查组和检查项中间表的数据
        * 3.再删除检查组的信息
        * */
        if (checkGroupDao.findSetMealIdById(id) > 0){ //被设置套餐关联 不能删除
            throw new RuntimeException("该检查组被检查套餐关联, 不能被删除 ! ! !");
        } else { //没有关联可以删
            checkGroupDao.delAssociationById(id);
            checkGroupDao.delById(id);
        }
    }

    @Override
    public List<CheckGroup> findAll() {
        return checkGroupDao.findAll();
    }

}